// PROGRAMA : TABPE006
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO, DETRAN E SEFAZ
// PROGRAMADOR : EDU/FM DATA: 27/05/92
// OBJETIVO : EMITIR TABELAS "15"(VALOR DO IPVA) ROT. TABNE001,02
// ATUALIZACOES DATA
// PROGRAMA : TABPE006 11/11/1997
// BIBLIOTECA : PRODETR
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DA TELA E O CAMPO AAN(N2) PARA AAN(N8)
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpe006Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpe006A;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpe006 OBJETIVO : EMITIR TABELAS "15"(VALOR DO IPVA) ROT. TABNE001,02 *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/tabpe006")
public class Tabpe006 {
	Tabpe006 tabpe006Anterior;
	private String faseproc = "0";
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpe006A tabpe006A;
	Tabpe006Report report;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private String tabela = "";
	private long codf = 0;
	private int cont = 0;
	private String pes2 = "";
	private String rrr = "";
	private double ufir = 0;

	// private double vlu = 0;

	private Tabpe006A preMapas() throws ParseException {
		tabpe006A = new Tabpe006A(true, sessao);
		sessao.getSisgsisp().setVar(10);
		// Par�grafo: r0()
		return tabpe006A;
	}

	public Tabpe006(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Tabpe006A tabpe006A) {
		try {
			return main(tabpe006A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}

		return null;
	}

	private InputStreamDownload main(Tabpe006A ptabpe006A) throws JRException, ParseException, FileNotFoundException {
		if (ptabpe006A == null) {
			primeiraVez = true;
			// tabpe006B = new Tabpe006B (primeiraVez);
			tabpe006A = preMapas();
			tabpe006A.setNavegar("../tabpe006/executar");
			result.include("tabpe006A", tabpe006A);
			sessao.setAtributo("Tabpe006", this);
			tabpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(ptabpe006A);
		}

		// //DEFINE PRINTER(EFM = 1)

		report = new Tabpe006Report();
		report.setDataCorrente(UtilBean.inverteDataCorrente());
		tabpe006A.receberTela(false, result);
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			sessao.setAtributo("Tabpe006", this);
			result.include("tabpe006B", tabpe006A);
			tabpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		tabela = "VALORES DE IPVA";
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 21);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", (tabpe006A.getAan() * 100) + 01);
		vwDvetab.chalfa = funcoes.sisst002(21, (tabpe006A.getAan() * 100) + 01, vwDvetab.chalfa);
		rrr = vwDvetab.chalfa;
		ufir = Double.parseDouble(rrr);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 15);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", ((tabpe006A.getAan() * 100) + (tabpe006A.getAan() - 1)) * 1000000);
		codf = (tabpe006A.getAan() + 1) * 100000000;
		// RELATORIO 1 PS=60 LS=80 SG=ON
		report.setPageSize(60);
		report.setLineSize(80);
		// RELATORIO
		// while (vwDvetab.leituraTabeleMaiorig(vwDvetab.pesq)) {
		while (vwDvetab.leituraTabeleMaiorig(15, (long) ((tabpe006A.getAan() * 100) + (tabpe006A.getAan() - 1)) * 1000000)) {
			// READADA
			if (vwDvetab.getCodigoElem() > codf || vwTabele.getCodigoTabela() != 15) {
				break;
			}

			report.setVal(vwDvetab.getDescricaoElem());
			report.setCodele(String.valueOf(vwDvetab.getCodigoElem()));
			report.setDintabCodele(vwDvetab.getCodigoElem());
			report.setValor(vwDvetab.getDescricaoElem());
			report.setVlu(Long.parseLong(report.getValor()) / ufir);
			pes2 = UtilBean.moveSubstring(pes2, 0, 3, "N", 2);
			pes2 = UtilBean.moveSubstring(pes2, 3, 12, "N", UtilBean.extraiDigitos(vwDvetab.getCodigoElem(), 12, 7, 6));
			// TELA PESQUISA TABELA

			vwDvetab.resp = funcoes.sisst001(2, UtilBean.extraiDigitos(vwDvetab.getCodigoElem(), 12, 7, 6), vwDvetab.resp);
			report.setFg(vwTabele.resp);
			report.gravaRelatorio(2);

			// RELATORIO MENSAGEM PROCESSANDO
			// cont += 1;
			// if (cont > 50) {
			// cont = 0;

			// tabpe006B.enviarReceberTela(false, result);
			// TABPE006_B TABPE006
			// }

		}
		vwDvetab.fecha();
		tabpe006A.enviarMensagem("", "EMISSAO EFETUADA OK");
		sessao.setAtributo("Tabpe006", this);
		vwDvetab.pesq = "";
		result.include("tabpe006B", tabpe006A);
		// tabpe006A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		return report.imprimir();

		// tabpe006A.enviarMensagem("", "EMISSAO EFETUADA OK");

	}

	private void vaiDeCao() {
		// CHAMA PROGRAMA DE ACORDO COM OPERACAO
		funcoes.sissm001(result, sessao);
	}

	// report.gravaRelatorio( 1);
	// UtilBean.mensagemTexto(" " tabpe006B.getCabecaseg() "PAG"
	// *PAGE-NUMBER(EFM) tabpe006B.getCabecadet() "TABPE006"
	// "CADASTRO DE APOIO ==> TABELA VALOR DE IPVA" tabpe006B.getDataCorrente() "-"
	// "ANO/COD MOD." "MARCA/MODELO" "VALOR EM REAL" "QDE. UFIR");
	// RELATORIO
	// SISCERRO}}}

	private void restaurarEstados(Tabpe006A ptabpe006A) {
		this.tabpe006Anterior = (Tabpe006) sessao.getAtributo("Tabpe006");
		if (ptabpe006A != null) {
			tabpe006A = ptabpe006A;
		} else {
			tabpe006A = this.tabpe006Anterior.tabpe006A;
		}
		tabpe006A.setSessao(sessao);
		this.faseproc = this.tabpe006Anterior.faseproc;
	}

}
